#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "arr.h"

int add_elm(elm_t **p, int *n, elm_t val)
{
	// 扩容
	*p = realloc(*p, (*n + 1) * sizeof(elm_t));
	if (NULL == *p)
		return -1;

	// copy数据
	(*p)[*n] = val;
	(*n)++; // *n++表达式结果是*n,n再++

	return 0;
}

int find_elm(const elm_t *p, int n, elm_t key)
{
	int i;

	for (i = 0; i < n; i++)
		if (p[i] == key)
			return i;

	return -1;
}

int del_elm(elm_t **p, int *n, elm_t key)
{
	int i;

	// 找到要删除的元素
	i = find_elm(*p, *n, key);
	if (-1 == i)
		return -1;

	// 覆盖找到的元素
	memcpy(*p + i, *p + i + 1, (*n - (i + 1)) * sizeof(elm_t));
	(*n)--;

	// 缩容
	*p = realloc(*p, *n * sizeof(elm_t));
	if (NULL == *p)
		return -1;
	return 0;
}

void traval(const elm_t *p, int n)
{
	int i;

	for (i = 0; i < n; i++) {
		printf("%d ", p[i]);
	}
	printf("\n");
}

void destroy(elm_t **p)
{
	free(*p);
	*p = NULL;
}

